package main

import (
	"fmt"
)

// 数组: 数组在函数中也属于值传递,如果想传递引用需要使用指针传递,数组的长度不确定可以不写
// 切片silence
//    注意事项:1.切片定义后不可以直接使用，需要让其引用到一个数组，或者make一个空间供切片来使用
//            2.切片使用不能越界
//            3. 简写方式:
//                       1) var slice = arr[0:end]  ----》 var slice = arr[:end]
//                       2) var slice = arr[start:len(arr)]  ----》  var slice = arr[start:]
//                       3) var slice = arr[0:len(arr)]   ----》 var slice = arr[:]
//            4.切片可以继续切片
//            5.切片可以动态增长
//            6.切片可以动态追加
// 映射
func main() {
	//useArray()
	//useSilence()
	useMap()
}
// 映射的使用
func useMap(){
	a:=make(map[int]string,10)
	a[12]="zs"
	a[23]="ls"
	a[30]="ww"
    delete(a,12) // 删除map中的12key


	fmt.Println(a)
    // map的定义2
	c := map[int]string{
		20095452 : "张三",
		20098765 : "李四",
	}
	c[20095387] = "王五"
	fmt.Println(c)

	//map的遍历
	for key,value := range c {
		fmt.Println(key,value)
	}

}
// 切片的使用
func useSilence(){
   var arr = [10]int{1,2,3,4,5,6,7,8,9,10}
   // 切片的定义
   var s1 = arr[1:3] // 切片的使用,前闭后开
   fmt.Println(s1)
   fmt.Println(len(s1),cap(s1))
   // 通过make定义切片 三个参数分别为:切片类型 切片长度 切片容量
   var s2 = make([]int,5,10)
   fmt.Println(s2)
   s2[1]=30
   s2[3]=50
   fmt.Println(s2)
   fmt.Printf("切片的长度 %v 切片的容量 %v",len(s2),cap(s2))
   // 切片的追加
   s2=append(s2,2,3,4)
   fmt.Println(s2)

	// 切片的copy
	var a []int = []int{1,4,7,3,6,9}
	//再定义一个切片：
	var b []int = make([]int,10)
	//拷贝：
	copy(b,a) //将a中对应数组中元素内容复制到b中对应的数组中
	fmt.Println(b)
}

// 数组的使用
func useArray(){
	// 数组的定义
	//var arr1 [5]int = [5]int{20,40,30}
	//var arr2 = [5]int{20,40,30}
	var arr [5]int
	arr[0]=50
	arr[1]=10
	arr[2]=20
	arr[3]=30
	arr[4]=40
	fmt.Println(arr)
	// 数组的遍历
	for i:=0;i<len(arr);i++{
		fmt.Println("数组的元素是:",arr[i])
	}
	for key,value := range arr {
      fmt.Printf("对应的索引为 %v 对应的值为 %v \n",key,value)
	}

    // 二维数组 两行三列
    var arr3 = [2][3]int{{2,3,4},{5,6,7}}
    fmt.Println(arr3)
}